package pilha;

public class PilhaLigada implements Pilha {
	
	private No topo;
	private int tam;
	
	public PilhaLigada() {
		topo = null;
		tam = 0;
	}

	public Object desempilhar() {
		if (!vazia()) {
			Object elemento = topo.getElemento();
			
			topo = topo.getProx();
			
			tam--;
			return elemento;
		} else {
			return null;
		}
	}

	public void empilhar(Object elemento) {
		No novo = new No(elemento, topo);
		topo = novo;
		tam++;
	}

	public int tamanho() {
		return tam;
	}

	public Object topo() {
		return (topo != null) ? topo.getElemento() : null;
	}

	public boolean vazia() {
		return (tam == 0);
	}
	
	public String toString() {
		String pilha = "[ ";
		
		No no = topo;
		while (no != null) {
			pilha += no.getElemento().toString() + " ";
			no = no.getProx();
		}
		
		pilha += "]";
		
		return pilha;
	}

}
